﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sunny.Controls.Searcher
{
	public class EnumList<enumType> : DropDownList where enumType : struct
	{
		//private Telerik.Web.UI.DropDownListItem[] _DropDownItems;
		//protected virtual Telerik.Web.UI.DropDownListItem[] DropDownItems
		//{
		//    get
		//    {
		//        if (this._DropDownItems == null)
		//        {
		//        }
		//        return this._DropDownItems;
		//    }
		//}

		public enumType? SelectedEnum
		{
			get
			{
				if (this.SelectedItem == this.NullItem)
					return null;
				return (enumType)this.SelectedValue;
			}
			set
			{
				this.SelectedValue = value;
			}
		}

		//public override string SelectedValue
		//{
		//    get
		//    {
		//        return base.SelectedValue;
		//    }
		//    set
		//    {
		//        base.SelectedValue = value;
		//        this._SelectedEnum = null;
		//    }
		//}

		public override string ValueProperty
		{
			get
			{
				return "SelectedEnum";
			}
		}

		//public enumType VisibleEnum
		//{
		//    get
		//    {
		//        ulong result = 0;
		//        foreach (Syncfusion.Windows.Tools.Controls.ComboBoxItemAdv item in this.Items)
		//        {
		//            if (item.Content == null)
		//                continue;
		//            result |= System.Convert.ToUInt64(item.Content);
		//        }
		//        return (enumType)System.Enum.ToObject(this.EnumType, result);
		//    }
		//    set
		//    {
		//        ulong enumValue = System.Convert.ToUInt64(System.Enum.ToObject(this.EnumType, value));
		//        foreach (Syncfusion.Windows.Tools.Controls.ComboBoxItemAdv item in this.Items)
		//        {
		//            if (item.Content == null)
		//                continue;

		//            ulong itemValue = ulong.Parse(item.Value);
		//            if ((enumValue & itemValue) != itemValue)
		//                this.Items.RemoveAt(i);
		//        }
		//    }
		//}

		//private System.Type _EnumType;
		//protected System.Type EnumType
		//{
		//    get
		//    {
		//        if (this._EnumType == null)
		//            this._EnumType = typeof(enumType);
		//        return this._EnumType;
		//    }
		//}

		//private System.Type _UnderlyingType;
		//protected System.Type UnderlyingType
		//{
		//    get
		//    {
		//        if (this._UnderlyingType == null)
		//            this._UnderlyingType = System.Enum.GetUnderlyingType(this.EnumType);
		//        return this._UnderlyingType;
		//    }
		//}

		public EnumList()
		{
			this.ItemsSource = System.Enum.GetValues(typeof(enumType));
			//this.SelectedValuePath = "Content";
			//foreach (System.Enum e in System.Enum.GetValues(typeof(enumType)))
			//    this.Items.Add(new Syncfusion.Windows.Tools.Controls.ComboBoxItemAdv { Content = e });
		}

		//protected enumType ToEnum(string value)
		//{
		//    return (enumType)System.Enum.ToObject(this.EnumType, System.Convert.ChangeType(value, this.UnderlyingType));
		//}
	}
}